
//定义类
function Dog(name,energy){
  let _listeners = {
    //event1是事件名 listener是事件函数
    //'evnet1':[listener1,listener2, ...],
    //'events':[]
  };

  let _name = name,
      _energy = energy;
//定时器
  let timer = setInterval(()=>{
    if(_energy>0){
      emit('bark');
      _energy--;
    }
    else{
      clearInterval(timer);
    }
  },1000);
  //两个公开方法返回私有属性
  this.name = ()=>_name;
  this.energy =()=>_energy;

this.on = (evt,fn)=>{
  //校验_listeners[evt]是存在的
  if(typeof(_listeners[evt]==='undefined')){
    _listeners[evt] = [];
  }

  _listeners[evt].push(fn);
}
//emit就是调用回调函数
function emit (evt,arg){
  //校验evt是存在的
  if(typeof(_listeners[evt])==='undefined'){
    return;
  }

  _listeners[evt].forEach((fn)=>{
    fn.call(this,arg);
  });
}
}
module.exports = Dog;
